/**
 * @file menu.h 设备模块的头文件
 *  向下(device,users)调用设备模块，用户模块的函数来实现这些功能
 *  包含: 
 * 1. 界面函数定义
 * @author pzk (1528089905@qq.com)
 * @brief 
 * @version 1.0
 * @date 2025-8-4
 * 
 * @copyright copyright (c) 2025
 */

#ifndef MENU_H
#define  MENU_H

#include "dlist.h"
#include "device.h"
#include "users.h"


/** 
 * @brief   清空缓冲区
 * 
 * 
 */
void clear_input_buffer();


/** 
 * @brief  读取字符串，用于添加设备的描述时使用
 * 
 * @param 
 *      @buf  字符串
 *      @size 数据大小
 * 
 */
void safe_gets(char *buf, int size);


/** 
 * @brief   欢迎界面
 * 			选择1   管理登陆界面      选择2   用户登陆界面
 * 			选择Q   退出
 *
 * @param 
 *      @devlist    设备链表
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int welcome_menu(node_t * devlist,node_t * userlist);   

/** 
 * @brief  	管理登陆界面
 * 			输入帐号密码，有三次机会，或者输入QUIT退出
 *
 * @param 
 *      @devlist    设备链表
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int Alogin_menu(node_t * devlist,node_t * userlist);     
			
            								
/** 
 * @brief   管理界面
 * 			选择1   添加设备     选择2   删除用户
 * 			选择3   查找设备     选择4   更新用户
 *          选择5   显示设备     选择6   添加用户
 *          选择7   删除用户     选择8   显示用户
 *          选择9   查找用户     选择q   返回上一级
 *
 * @param 
 *      @devlist    设备链表
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */														  
int admin_menu(node_t * devlist,node_t * userlist);     


/** 
 * @brief   添加设备界面
 * 			输入数据添加设备到链表
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */															  
int add_dev_menu(node_t * devlist);    


/** 
 * @brief   删除设备界面
 * 			选择删除方式之后输入数据查找删除
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */			
int del_dev_menu(node_t * devlist);


/** 
 * @brief   更新设备界面
 * 			选择更新方式之后输入新数据修改
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */			
int update_dev_menu(node_t * devlist);


/** 
 * @brief   显示设备界面
 * 			选择排列方式之后显示全部设备
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */			
int show_dev_menu(node_t * devlist); 


/** 
 * @brief   查找设备界面
 * 			根据查找方式遍历查找所有符合内容显示
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */			
int find_dev_menu(node_t * devlist);

/** 
 * @brief   清空设备界面
 * 			两次确认
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */			
int clear_dev_menu(node_t * devlist);


/** 
 * @brief   复制设备界面
 * 			
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */			
int copy_dev_menu(node_t * devlist);


/** 
 * @brief   控制开关设备界面
 * 			
 * @param 
 *      @devlist    设备链表
 * @return int 错误-1,正常退出结束0
 */	
int control_dev_menu(node_t * devlist);


/** 
 * @brief  	用户登陆界面
 * 			验证帐号密码
 *
 * @param 
 *      @devlist    设备链表
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int Ulogin_menu(node_t * devlist,node_t * userlist);


/** 
 * @brief  	用户菜单界面
 *
 * @param 
 *      @devlist    设备链表
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int user_menu(node_t * devlist,node_t * userlist);

/** 
 * @brief  	输入数据添加用户
 *
 * @param 
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int add_user_menu(node_t *userlist);


/** 
 * @brief  	按值删除用户
 *
 * @param 
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int del_user_menu(node_t *userlist);


/** 
 * @brief  	按值查找用户
 *
 * @param 
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int find_user_menu(node_t *userlist);


/** 
 * @brief  	排序之后显示用户
 *
 * @param 
 *      @userlist	用户链表
 * @return int 错误-1,正常退出结束0
 */
int show_user_menu(node_t *userlist);

/** 
 * @brief   IP地址验证格式
 * 			
 * @param 
 *      @ip    输入的ip
 * @return int 错误0,通过1
 */	
int ip_format(const char *ip);

#endif
